In [89]:
# special IPython command to prepare the notebook for matplotlib
%matplotlib inline 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random

from sklearn.linear_model import LinearRegression
from scipy import polyval, polyfit
from scipy.stats import pearsonr, linregress


# set some nicer defaults for matplotlib
from matplotlib import rcParams

#colorbrewer2 Dark2 qualitative color table
dark2_colors = [(0.10588235294117647, 0.6196078431372549, 0.4666666666666667),
                (0.8509803921568627, 0.37254901960784315, 0.00784313725490196),
                (0.4588235294117647, 0.4392156862745098, 0.7019607843137254),
                (0.9058823529411765, 0.1607843137254902, 0.5411764705882353),
                (0.4, 0.6509803921568628, 0.11764705882352941),
                (0.9019607843137255, 0.6705882352941176, 0.00784313725490196),
                (0.6509803921568628, 0.4627450980392157, 0.11372549019607843)]

rcParams['figure.figsize'] = (12, 6.5)
rcParams['figure.dpi'] = 150
rcParams['axes.color_cycle'] = dark2_colors
rcParams['lines.linewidth'] = 2
rcParams['axes.facecolor'] = 'white'
rcParams['font.size'] = 18
rcParams['patch.edgecolor'] = 'white'
rcParams['patch.facecolor'] = dark2_colors[0]
rcParams['font.family'] = 'StixGeneral'

def remove_border(axes=None, top=False, right=False, left=True, bottom=True):
    """
    Minimize chartjunk by stripping out unnecesary plot borders and axis ticks
    
    The top/right/left/bottom keywords toggle whether the corresponding plot border is drawn
    """
    ax = axes or plt.gca()
    ax.spines['top'].set_visible(top)
    ax.spines['right'].set_visible(right)
    ax.spines['left'].set_visible(left)
    ax.spines['bottom'].set_visible(bottom)
    
    #turn off all ticks
    ax.yaxis.set_ticks_position('none')
    ax.xaxis.set_ticks_position('none')
    
    #now re-enable visibles
    if top:
        ax.xaxis.tick_top()
    if bottom:
        ax.xaxis.tick_bottom()
    if left:
        ax.yaxis.tick_left()
    if right:
        ax.yaxis.tick_right()

In [30]:
hist_df = pd.read_csv(r'C:\Users\Sebastian\Dropbox\Semester 6\BPM QM\Werkzeuge des Qualitaetsmanagements\Fallstudien\Histogramm\Fallstudie_Histogramm_raw_data.csv')

In [31]:
hist_df.head()


Out[31]:
VorfallNr Dauer [Stunden]
0 1 81.537413
1 2 50.039775
2 3 79.665831
3 4 134.478216
4 5 9.870774

In [32]:
hist_df['Dauer [Stunden]'].mean()


Out[32]:
171.53298198811484

In [33]:
hist_df['Dauer [Stunden]'].std()


Out[33]:
176.92746583952311

In [34]:
bin_num = hist_df['Dauer [Stunden]'].max()/float(20)
hist_df['Dauer [Stunden]'].hist(bins=bin_num)
remove_border()
plt.grid(False)
plt.grid(axis = 'y', color ='white', linestyle='-')
plt.show()



In [35]:
z = [50*.995 ** k for k in xrange(1200)]
plt.plot(z)
remove_border()


SCATTER


In [36]:
scatter_df = pd.read_csv(r'C:\Users\Sebastian\Dropbox\Semester 6\BPM QM\Werkzeuge des Qualitaetsmanagements\Fallstudien\Scatter-Diagramm\Scatter-Diagramm-raw_data.csv')

In [52]:
scatter_df =  scatter_df.astype(float)
scatter_df = scatter_df.dropna()

In [65]:
print scatter_df.head()


   AuftragNr1  Abwicklungszeit [sec]1  Auftragsvolumen1  AuftragNr2  \
0           1                     483          14097.89           1   
1           2                     503          17982.94           2   
2           3                     413          16027.24           3   
3           4                     373           9582.38           4   
4           5                     658          23586.65           5   

   Abwicklungszeit [sec]2  Auftragsvolumen2  
0                    3685             19161  
1                    5249             23633  
2                    2380             15032  
3                    1619             10633  
4                    1645             11673  

In [54]:
#print scatter_df.corr()
print pearsonr(scatter_df['Abwicklungszeit [sec]1'], scatter_df['Auftragsvolumen1'])
print pearsonr(scatter_df['Abwicklungszeit [sec]2'], scatter_df['Auftragsvolumen2'])


(0.93121017520682825, 8.5152378767540137e-14)
(0.9778326028240919, 1.4798494480469965e-20)

In [55]:
mean_abw_1 = scatter_df['Abwicklungszeit [sec]1'].mean()
mean_abw_2 = scatter_df['Abwicklungszeit [sec]2'].mean()
mean_auf_1 = scatter_df['Auftragsvolumen1'].mean()
mean_auf_2 = scatter_df['Auftragsvolumen2'].mean()

std_abw_1 = scatter_df['Abwicklungszeit [sec]1'].std()
std_abw_2 = scatter_df['Abwicklungszeit [sec]2'].std()
std_auf_1 = scatter_df['Auftragsvolumen1'].std()
std_auf_2 = scatter_df['Auftragsvolumen2'].std()

In [61]:
cov_1 = 0
zw_1 = 0
cov_2 = 0
zw_2 = 0
N = 0

for i in scatter_df.iterrows():
    N += 1
    zw_1 += (i[1][1] - mean_abw_1)*(i[1][2] - mean_auf_1)
    zw_2 += (i[1][4] - mean_abw_2)*(i[1][5] - mean_auf_2)
    
cov_1 = zw_1/float(N)
cov_1 = cov_1/(std_abw_1 * std_auf_1)
cov_2 = zw_2/float(N)
cov_2 = cov_2/(std_abw_2 * std_auf_2)

print cov_1
print cov_2


0.900169836033
0.94523818273

Interpretation

Das ist eine sehr hohe Correlation. Durch die P-Value < .001 ist das Ergebnis statistisch signifikant und ist es wahrscheinlich, dass der eine Wert den anderen erklärt. Auch wenn Correlation nicht gleich Causation ist, macht es sinn, dass ein hohes Auftragsvolumen der Grund für lange Reperaturzeiten ist.


In [90]:
def rsquared(x, y):
    """ Return R^2 where x and y are array-like."""

    slope, intercept, r_value, p_value, std_err = linregress(x, y)
    return r_value**2

In [92]:
(ar1, br1) = polyfit(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'],1)
xr1=polyval([ar1,br1],scatter_df['Auftragsvolumen1'])
print "alpha 1", ar1
print "beta 1", br1
print "r square 1", rsquared(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'])

print 

(ar2, br2) = polyfit(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'],1)
xr2=polyval([ar2,br2],scatter_df['Auftragsvolumen2'])
print "alpha 2", ar2
print "beta 2", br2
print "r square 2", rsquared(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'])


alpha 1 0.020390312958
beta 1 109.354604032
r square 1 0.867152390409

alpha 2 0.219918482146
beta 2 -515.041492061
r square 2 0.956156599146

In [94]:
plt.scatter(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'], color=dark2_colors[1])
plt.plot(scatter_df['Auftragsvolumen1'],xr1,'.-', color=dark2_colors[2])
remove_border()
plt.title('Stichprobe 1')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
plt.show()
plt.scatter(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'], color=dark2_colors[3])
plt.plot(scatter_df['Auftragsvolumen2'],xr2,'.-', color=dark2_colors[4])
plt.title('Stichprobe 2')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
remove_border()
plt.show()



In [116]:
z1 = polyfit(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'],2)
z2 = polyfit(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'],2)

In [124]:
plt.scatter(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'], color=dark2_colors[1])
plt.plot(scatter_df['Auftragsvolumen1'],xr1,'.-', color=dark2_colors[2])
remove_border()
plt.title('Stichprobe 1')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])

#polyfit
xp = np.linspace(0, 25000, 100)
p = np.poly1d(z1)
plt.plot(xp, p(xp) )

plt.legend(['linear', 'quadratic'], loc=4)
plt.show()



In [120]:
plt.scatter(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'], color=dark2_colors[3])
plt.plot(scatter_df['Auftragsvolumen2'],xr2,'.-', color=dark2_colors[5])
plt.title('Stichprobe 2')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
remove_border()

#polyfit
xp = np.linspace(0, 25000, 100)
p = np.poly1d(z2)
plt.plot(xp, p(xp) )

plt.legend(['linear', 'quadratic'], loc=4)
plt.show()



In [ ]: